import processing.core.*;


/**
 * @author Tiina, Chris, Lauri
 *
 *Luokka kuvaa käyttöliittymän kelloa.
 */
public class Clock {

	private boolean currentDay;
	private int fontSize;
	private int h, m, hours, mins; //h todellinen aika, m todelliset minuutit, hours tunnit ohjelmassa, mins minuutit ohjelmassa
	private int nopeuskerroin; //Kuinka nopeasti kello kulkee
	private float x, y; //Kellon sijainti
	private UserInterface p;
	

	public Clock (int fontsize, float x, float y, UserInterface parent, int kerroin) {
		this.fontSize = fontsize;
		this.x = x;
		this.y = y;
		this.currentDay = true;
		this.p = parent;
		this.nopeuskerroin = kerroin;
		this.hours = -1;
	}


	/*Kerrotaan aika, jolloin ohjelma on avattu.*/
	public void initTime() {
		this.h = PApplet.hour();
		this.m = PApplet.minute();
	}

	/*Asetetaan kellonajaksi parametrina annetut tunnit ja minuutit.*/
	public void setTime(int hours, int minutes) {
		this.hours = hours;
		this.mins = minutes;
	}
	
	public int getHoursReal() {
		return this.hours;
	}
	
//	public int getMinsReal() {
//		return this.mins;
//	}

	/*Esitetään kello.*/
	public void display() {
		p.textSize(this.fontSize);
		p.textAlign(PApplet.CENTER);
			
		
		if (this.hours == -1) {  //Alustus, kellonaika asetetaan ekaa kertaa
			this.hours = this.giveHours(); // 
		}

		if (this.hours == 24) {
			this.p.updateWeekDay(true);
			this.currentDay = false;
			this.hours = 0;
		}
		
		if (this.hours == this.giveHours() && !this.currentDay) {
			this.p.updateWeekDay(false);
			this.currentDay = true;
		}
		
		int vanhaMins = this.mins; //Varastoidaan vanha aika
		this.mins = ((p.millis()*this.nopeuskerroin / 1000) + this.m) % 60; //Lasketaan nykyiset minuutit
		
		if (vanhaMins > this.mins) {
			/* Jos edellinen minuuttimäärä on suurempi kuin nykyinen (todnäk 59 > 0), 
			 * ollaan siirrytty seuraavaan tuntiin, ja päivitetään siitä tieto.
			 */
			
			this.hours++;
		}
		
		p.text(this.hours + ":" + PApplet.nf(this.mins, 2), this.x, this.y);

	}
	
	
	/*Palautetaan kerroin, jonka nopeudella kello kulkee.*/
	public int annaNopeuskerroin() {
		return this.nopeuskerroin;
	}

	/*Palautetaan tunti, jonka aikana ohjelma avattiin.*/
	public int giveHours() {
		return this.h;
	}

	/*Palautetaan minuuteissa, paljonko kello ohjelman mukaan on.*/
	public int getMinutes() {
		return this.hours*60+this.mins; 
	}

}